package com.chapter14.demo3;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;

/**
 * reduce是一种归约操作，将流归约成一个值的操作叫作归约操作。
 * reduce方法在求和、求最大/最小值等方面都能很方便地实现。
 */
public class ReduceStream {
    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(1,3,5,7,4,6);
        Stream<Integer> stream = list.stream();

        //方法引用，等价于(a,b)->a>b ? a:b
        Optional<Integer> maxValue = stream.reduce(Integer::max);
        System.out.println(maxValue.get());

        stream = list.stream();
        //lambda表达式，等价于方法引用Inter::sum
        Integer sum = stream.reduce(10, (a, b) -> a + b);
        System.out.println(sum);

    }
}
